package net.suncaper.mvc.service.impl;

import net.suncaper.mvc.exception.BusinessException;
import net.suncaper.mvc.mapper.ReviewMapper;
import net.suncaper.mvc.mapper.impl.ReviewMapperImpl;
import net.suncaper.mvc.model.domain.Review;
import net.suncaper.mvc.service.IReviewService;

import java.text.SimpleDateFormat;
import java.util.List;

/**
 * 评价信息服务接口实现
 */
public class ReviewServiceImpl implements IReviewService {
    private final ReviewMapper reviewMapper = new ReviewMapperImpl();
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 添加评价
     * @param review 评价信息
     * @return 添加结果
     */
    @Override
    public boolean addReview(Review review) {
        // 校验必填字段
        if (review.getUserId() == null || review.getHotelName() == null || 
            review.getRating() == null || review.getReviewTime() == null) {
            throw new BusinessException("评价信息不完整，请补充必要信息");
        }
        
        // 检查用户和酒店是否存在的逻辑（需要调用UserService和HotelService）
        // 此处省略具体实现
        
        // 添加评价
        return reviewMapper.insertReview(review);
    }

    /**
     * 根据酒店名称获取评价列表
     * @param hotelName 酒店名称
     * @return 评价列表
     */
    @Override
    public List<Review> getReviewsByHotelName(String hotelName) {
        return reviewMapper.selectReviewsByHotelName(hotelName);
    }

    /**
     * 根据用户ID获取评价列表
     * @param userId 用户ID
     * @return 评价列表
     */
    @Override
    public List<Review> getReviewsByUserId(String userId) {
        return reviewMapper.selectReviewsByUserId(userId);
    }

    @Override
    public java.util.List<Review> getAllReviews() {
        return reviewMapper.selectAllReviews();
    }

    /**
     * 更新评价信息
     * @param review 评价信息
     * @return 更新结果
     */
    @Override
    public boolean updateReview(Review review) {
        // 校验是否存在
        String reviewTimeStr = DATE_FORMAT.format(review.getReviewTime());
        Review existingReview = reviewMapper.selectReviewByTime(reviewTimeStr);
        if (existingReview == null) {
            throw new BusinessException("要更新的评价不存在");
        }
        return reviewMapper.updateReview(review);
    }

    @Override
    public Review getReviewByTime(java.util.Date reviewTime) {
        String reviewTimeStr = DATE_FORMAT.format(reviewTime);
        return reviewMapper.selectReviewByTime(reviewTimeStr);
    }

    @Override
    public boolean deleteReview(java.util.Date reviewTime) {
        String reviewTimeStr = DATE_FORMAT.format(reviewTime);
        return reviewMapper.deleteReview(reviewTimeStr);
    }
}    